class Admin::CategoriesController < ApplicationController
  layout 'admin'

  before_filter :authenticate_user!, :check_if_admin

  def index
    @categories = Category.all

    respond_to do |format|
      format.html
    end
  end

  def new
    @category = Category.new
  end

  def create
    @category = Category.new(params[:category])

    respond_to do |format|
      if @category.valid?
        @category.save

        format.html { redirect_to admin_categories_url }
      else
        format.html { render :new }
      end
    end
  end

  def destroy
    @category = Category.find(params[:id])

    if @category.destroy
      flash[:success] = 'La categoría ha sido eliminada.'
    else
      flash[:fail] = 'La categoría está asociada a un producto.'
    end

    respond_to do |format|
      format.html { redirect_to admin_categories_url }
    end
  end

  def change_order
    @categories = Category.all

    respond_to do |format|
      format.html
    end
  end

  def update_order
    @error = false

    begin
      categories = params['categories']

      categories.each do |cat|
        unless cat[1].blank?
          cat_id = cat[0].to_i
          order = cat[1].to_i

          category = Category.find(cat_id)
          category.update_attribute(:listing_order, order)
        else
          raise
        end
      end
    rescue
      @error = true
    end

    respond_to do |format|
      unless @error == true
        flash[:success] = 'El orden ha sido actualizado satisfactoriamente.'
        format.html { redirect_to admin_categories_url }
      else
        @categories = Category.all
        flash[:fail] = 'No se pudo actualizar el orden de las categorías. Verifique que los valores ingresados sean correctos.'
        format.html { render :change_order }
      end
    end
  end
end
